@griffin , this is expected behavior (from our point of view 🙂 ). Here is what's happening:
the image from hires large stream (which is what I assume you are using) is either 3840x2160 or larger, around 4xxx by 3xxx depending on which camera you are using
voxl portal is not very efficient at processing large images and when it receives the huge 4K image (YUV or RGB), it will use turbojpeg (software JPG encoder) to convert it to jpeg. This process takes a lot of cpu for large images and especially if fps is 30, it is too much for voxl-portal to handle
if you want to view hires images through portal, you can enable (if not enabled) en_small_video stream in camera config file /etc/modalai/voxl-camera-server.conf and set resolution to something smaller, usually 1280x720 or similar is good (depending on the aspect ratio that you need)
once you enable the small video stream, you can view the hires_small_color stream from the voxl-portal
the cpu % (assuming you are looking at output of top) will show the cpu usage percentage at the current cpu frequency . So this number is often very misleading because if the cpu is not running at max frequency, it will have higher % usage compared to perf mode (which can be set using voxl-set-cpu-mode perf. You can use tool voxl-inspect-cpu to show the total usage of each core (which takes into account the frequency of each core) and you can also see the current core frequencies (but you cannot see individual processes).
Please let us know if you have any other questions.
Alex